//#define _CRT_SECURE_NO_WARNINGS 1
//class MyQueue {
//public:
//    std::stack<int> in;
//    std::stack<int> out;
//
//    MyQueue() {}
//
//    void inToOut() {
//        if (out.empty()) {
//            while (!in.empty()) {
//                out.push(in.top());
//                in.pop();
//            }
//        }
//    }
//
//    void push(int x) {
//        in.push(x);
//        inToOut();
//    }
//
//    int pop() {
//        inToOut();
//        int val = out.top();
//        out.pop();
//        return val;
//    }
//
//    int peek() {
//        inToOut();
//        return out.top();
//    }
//
//    bool empty() {
//        return in.empty() && out.empty();
//    }
//};
#include<iostream>
#include<stack>

using namespace std;

class MyQueue {


private:
    stack<int>
        inStack, outStack;

    void inout() {
        while (!inStack.empty()) {
            outStack.push(inStack.top());
            inStack.pop();
        }
    }

public:
    MyQueue() {}

    void push(int x) { inStack.push(x); }

    int pop() {
        if (outStack.empty()) {
            inout();
        }
        int x = outStack.top();
        outStack.pop();
        return x;
    }

    int peek() {
        if (outStack.empty()) {
            inout();
        }
        return outStack.top();
    }

    bool empty() { return inStack.empty() && outStack.empty(); }
};

/**
 * Your MyQueue object will be instantiated and called as such:
 * MyQueue* obj = new MyQueue();
 * obj->push(x);
 * int param_2 = obj->pop();
 * int param_3 = obj->peek();
 * bool param_4 = obj->empty();
 */